﻿using Ortodoctor.Componentes;
using Ortodoctor.gridComponent;
using Ortodoctor.modelo;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Services;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Ortodoctor.Funcionario
{
    public partial class Caixa : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (Session["USUARIO"] == null)
                Response.Redirect("Login.aspx");

            atualizaGrid();
        }

        [WebMethod]
        public static string getDados(string page, string rp, string sortname, string sortorder, string query, string qtype)
        {
            Grid grid = ((Grid)HttpContext.Current.Session["GRID_CAIXA"]);
            grid.page = Convert.ToInt32(page);
            DataTable dt = grid.dados.Clone();

            if (string.IsNullOrEmpty(query))
            {
                int numeroItensPagina = Convert.ToInt32(rp);
                int numeroPagina = Convert.ToInt32(page);
                int inicio = numeroItensPagina * (numeroPagina - 1);

                for (int i = inicio; i < inicio + numeroItensPagina && i < grid.dados.Rows.Count; ++i)
                {
                    DataRow dr = dt.NewRow();
                    foreach (DataColumn dc in dt.Columns)
                        dr[dc.ColumnName] = grid.dados.Rows[i][dc.ColumnName];

                    dt.Rows.Add(dr);
                }
                if (dt.Rows.Count > 0)
                {
                    dt.DefaultView.Sort = sortname + " " + sortorder;
                    dt = dt.DefaultView.ToTable();
                }
            }
            else
            {
                dt = grid.dados.Copy();
                dt.DefaultView.RowFilter = string.Format("[{0}] like '%{1}%'", qtype, query);
                dt = dt.DefaultView.ToTable();
            }
            return grid.getDadosToJson(dt);
        }

        private static void atualizaGrid()
        {
            modeloCaixa model = new modeloCaixa();
            Grid grid = null;
            //if (HttpContext.Current.Session["ID_CLINICA"] == null)
                grid = new Grid(model.getAll(), "id_caixas");

            DataTable dt = new DataTable();
            foreach (DataColumn dc in grid.dados.Columns)
                dt.Columns.Add(dc.ColumnName, typeof(string));

            foreach (DataRow dr in grid.dados.Rows)
            {
                DataRow drow = dt.NewRow();
                foreach (DataColumn dc in grid.dados.Columns)
                {
                    if (dc.ColumnName.ToUpper().Equals("DATA"))
                        drow[dc.ColumnName] = Convert.ToDateTime(dr[dc.ColumnName]).ToString("dd/MM/yyyy");
                    else
                        drow[dc.ColumnName] = dr[dc.ColumnName].ToString();
                }
                dt.Rows.Add(drow);
            }
            grid.dados = dt;

            HttpContext.Current.Session["GRID_CAIXA"] = grid;
        }

        [WebMethod]
        public static string editarCaixa(int id, string nome, string tipo)
        {
            modeloCaixa mc = new modeloCaixa();
            //bool editou = mc.editar(new Componentes.Caixas(id, tipo, nome, ""));            
            Caixas caixaAntes = mc.get(id);
            mc = new modeloCaixa();
            bool editou = mc.editar(id, tipo, nome);
            //Grid grid = (Grid)HttpContext.Current.Session["GRID_CAIXA"];
            atualizaGrid();
            if (editou)
            {
                
                mc = new modeloCaixa();
                mc.Log("Atualização", "Usuário " + HttpContext.Current.Session["ID_USUARIO_ACESSO"] + " - " + HttpContext.Current.Session["USUARIO"] + " fez alterações no Caixa " + id + " - " + caixaAntes.Nome);
                //PAREI AKI
                
                return "foi";
            }
            else
            {
                return "erro";
            }
        }

        [WebMethod]
        public static string addToTable(String nome, String tipo)
        {
            modeloCaixa mc = new modeloCaixa();
            int id_inserido = mc.insert(new Componentes.Caixas(tipo, nome));
            Caixas c = mc.get(id_inserido);
            atualizaGrid();
            return "foi";
        }

        [WebMethod]
        public static string addEntrada(int id, double valor, String obs)
        {
            modeloCaixa mc = new modeloCaixa();
            mc.addEntrada(id, valor, obs);
            return "foi";
        }

        [WebMethod]
        public static string deleteFromTable(int id)
        {
            modeloCaixa mc = new modeloCaixa();            
            Caixas nomeDeletado = mc.get(id);
            mc = new modeloCaixa();
            mc.delete(id);
            mc = new modeloCaixa();
            mc.Log("Deleção", "Usuário " + HttpContext.Current.Session["ID_USUARIO_ACESSO"] + " - " + HttpContext.Current.Session["USUARIO"] + " deletou o Caixa " + id + " - " + nomeDeletado);
            Grid grid = (Grid)HttpContext.Current.Session["GRID_CAIXA"];
            grid.deleteFromTable(id);
            HttpContext.Current.Session["GRID_CAIXA"] = grid;
            return "foi";
        }

        [WebMethod]
        public static string getCaixaComTransacoes(int id, string data, bool todas)
        {
            modeloCaixa mc = new modeloCaixa();
            Caixas c = mc.get(id);
            List<CaixaValor> cx = mc.getAllValor(id, data, todas);
            data = Convert.ToDateTime(data).ToString("dd/MM/yyyy");
            double soma_dia = mc.getSomaDia(id, data);            
            double soma_total = mc.getSomaTotal(id);
            //colocar informacoes do caixa
            String retorno = c.Nome + "/#/" + c.Tipo + "/#/"+c.Atualizacao+"/#/"+c.IdClinica+" - "+c.CidadeClinica+"<>#<>";
            
            //colocar todas as entradas no caixa            
            for (int i = 0; i < cx.Count; ++i)
            {
                retorno = retorno + cx[i].LoginUsuario + "/#/" + cx[i].Valor + "/#/" +
                    cx[i].Dia + "/#/" + cx[i].Observacoes;
                if (i == cx.Count - 1)
                {
                    retorno = retorno + "<>entradas<>";
                }
                else
                {
                    retorno = retorno + "/#/";
                }
            }

            if (cx.Count == 0)
            {
                retorno = retorno + "Nenhum Valor Adicionado a Este Caixa Neste dia <>entradas<>";
            }

            //colocar soma_dia
            retorno = retorno + soma_dia + "<>soma_dia<>";
            //colocar soma_total
            retorno = retorno + soma_total;

            return retorno;
        }
    }
}